package com.hhf.riceshopping.product.feign;

import com.hhf.common.to.SkuReductionTo;
import com.hhf.common.to.SpuBoundTo;
import com.hhf.common.utils.R;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;

// 远程调用riceshopping-conpon服务保存sms_spu_bounds（积分表）
@FeignClient("riceshopping-conpon")
public interface CouponFeignService {

    /**
     * springcloud的Feign远程调用，两个服务接口的参数名不一致的问题
     *  1、那么springcloud就会将这个对象转为json--@RequestBody
     *  2、springcloud会去注册中心找到远程的服务并发送对应路径的请求
     *  3、发送请求的时候，会把参数的对象转为josn放到请求体位置
     *  4、接收方服务接收到请求，实际上是收到了请求体里边的json数据，并把请求体里边的json数据转为对方服务的参数里边的对象
     *  5、但接收方服务的控制器参数写的参数是标注了@RequestBody的参数名跟发送方请求过来的对象实体json参数名不一致的
     *  6、不过就算参数实体名不一致也是能转的，只要发送方的json里边的属性名和最终接收方服务的参数属性名有一一对应就可以进行封装对象
     *  7、而不一定非要发送出去的发送方的参数实体名跟接收方的参数实体名一致，这是没有这种死规定的，因为最终都是将json转换的
     *
     *  总结：只要json数据模型是兼容的，双方服务无需使用同一个对象。只要对应好服务的请求路径以及服务的封装格式最终响应数据的数据模型都是能封装就没什么问题
     *
     * @param spuBoundTo
     * @return
     */
    //远程调用保存积分
    @PostMapping("/conpon/spubounds/save")
    R saveSpuBounds(@RequestBody SpuBoundTo spuBoundTo);

    //远程调用保存满减
    @PostMapping("/conpon/skufullreduction/saveinfo")
    R saveSkuReduction(@RequestBody SkuReductionTo skuReductionTo);
}
